草庐IT

Java SE - 集合

全部标签

java - 最高效但线程安全的列表/集合

Java有大量不同的Collections是为并发和线程安全而设计的,我不知道该选择哪一个来满足我的情况。多个线程可能正在调用.add()和.remove(),我会经常用ListnewList=newArrayList(concurrentList)之类的东西复制这个列表.我永远不会遍历并发列表。我想到了类似CopyOnWriteArrayList的事情,但我读到它可能非常低效,因为它每次修改时都会复制自己。我希望在安全和效率之间找到一个好的折衷方案。这种情况的最佳列表(或集合)是什么? 最佳答案 正如@SpiderPig所说,Li

java - 为什么 Collectors.toList() 不适用于原始集合?

(这可能与https://stackoverflow.com/a/30312177/160137有关,但恐怕我还是不明白。所以我以这种方式问我的问题,希望它能得到答案我可以更多很容易理解。)通常当我有一个Stream时,我可以使用Collectors类中的静态方法之一将它转换为一个集合:Liststrings=Stream.of("this","is","a","list","of","strings").collect(Collectors.toList());但是,正如其他人所注意到的那样,类似的过程不适用于原始流:IntStream.of(3,1,4,1,5,9).collect

java - 使用 Java Stream 从一组集合中收集所有对象

我正在尝试学习JavaStreams并尝试获得HashSet来自HashSet>.HashSetstudents=getAllStudents();HashSet>teachersForStudents=students.stream().map(Person::getTeachers).collect(Collectors.toCollection(HashSet::new));HashSet=//combineteachersandstudentsinoneHashSet我真正想要的是将所有老师和所有学生合二为一HashSet.我想我在收集流时做错了什么?

java - IntelliJ IDEA - 导入 Eclipse 项目时出现 "Imported project refers to unknown jdks JavaSE-1.8"

我试图将Eclipse项目导入到IntelliJIDEA中,但我遇到了这个错误: 最佳答案 eclipse项目描述包含对“手动”定义的JDK(名为JavaSE-1.8)的引用。只需继续并自己在IntelliJ中为您的项目定义一个SDK。参见here必要的步骤:TodefineaJDKandamobileSDKinIntelliJIDEAOpentheProjectStructuredialog(e.g.Ctrl+Shift+Alt+S).Intheleftmostpane,underPlatformSettings,clickSDK

java - 集合删除方法不提供并发修改异常

我读过一篇关于从thislink的集合中删除元素的文章根据我的理解,迭代器删除方法可防止并发修改异常,然后删除集合的方法。但是当我尝试运行以下代码时,我无法获得并发修改异常ListdayList=newArrayList();dayList.add("Sunday");dayList.add("Monday");dayList.add("Tuesday");dayList.add("Wednesday");dayList.remove("Tuesday");Iteratoritr=dayList.iterator();while(itr.hasNext()){ObjecttestLis

java - 如何声明通用处理程序的通用多类型集合

我总是很难将泛型与集合和通配符一起使用。所以这是下面的map。我想为特定类型的数据包类保留处理程序集合。privateConcurrentHashMap,List>>listeners=newConcurrentHashMap();和PacketListenerpublicinterfacePacketListener{publicvoidonOutgoingPacket(Streamerstreamer,Tpacket);publicvoidonIncomingPacket(Streamerstreamer,Tpacket);}现在我想做的是根据传入的数据包类获取监听器,如下所示:p

java - 无法延迟初始化角色 : User. 权限的集合,无法初始化代理 - 无 session

在我的SpringBoot/Data/JPA应用程序中,我有以下实体:@Entity@NamedEntityGraph(name="graph.User",attributeNodes={@NamedAttributeNode("authorities")})@Table(name="users")publicclassUserextendsBaseEntityimplementsUserDetails{privatestaticfinallongserialVersionUID=8884184875433252086L;@Id@SequenceGenerator(name="user

java - 将默认项添加到流集合

我正在对流执行一些操作并返回一个数组列表。这是没有问题的,但如果数组列表为空,我需要做最后一步添加一个元素(与选项/空值无关,只是要求的一部分)我的方法有点笨拙,我想知道它是否可以改为在流操作中完成?publicArrayListgetArrayList(){ArrayListaL=setOfStrings.stream().filter(removesome).filter(removesomemore).map(i->createStringAbout(i)).collect(Collectors.toCollection(ArrayList::new));if(aL.size()

java - 在这种情况下,正确的 Java 集合是什么?

我需要在列表或集合中保存大量元素(500k左右)我需要进行高性能遍历、添加和删除。这将在多线程环境中完成,我不在乎我是否能在遍历开始后看到完成的更新(弱一致性),哪种Java集合适合这种情况? 最佳答案 Ineedtoholdalargenumberofelements(500korso)inalistorasetIneedtodohighperformancetraversal,additionandremoval....ThiswillbedoneinamultithreadedenvironmentConcrrentSkipL

java - java集合接口(interface)中的继承

Java集合接口(interface)中存在一些继承关系。例如,Collection接口(interface)将扩展Iterable.我检查了JDK中的源代码,基类中定义的一些方法在子类中重复了几次。例如:Interable接口(interface)定义了一个方法Iteratoriterator();但是在界面Collection和List,也包含相同的方法。我的理解是,既然继承是为了减少重复,为什么还要在子类中定义相同的方法呢? 最佳答案 参见java.util.List“List接口(interface)在迭代器、add、rem